package com.zsrt.day20170419.pm.programer.impl;


import com.zsrt.day20170419.pm.programer.Programmer;
import com.zsrt.day20170419.pm.programer.dao.ProgrammerDao;

/**
*@author jzh
*@创建时间 2017年4月19日下午3:35:42
*类说明：
*/
public class ProgrammerDaoImpl implements ProgrammerDao {
	
	/**
	 * 根据名字判断程序员是否存在
	 * @param programmer	原程序员数组
	 * @param name          给定的名字	
	 * @return              存在，返回下标，不存在，返回-1
	 */
	@Override
	public int isExsit(Programmer[] programmers, String name) {
		for(int index=0;index<programmers.length;index++){
			String mingZi=programmers[index].getName();
			if(mingZi.equals(name)){
				return index;
			}	
		}
		return -1;
	}
	
	/**
	 * 增加一个程序员
	 * @param programmers	原程序员数组
	 * @param programmer	要增加的程序员对象
	 * @return              增加后的程序员数组
	 */
	@Override
	public Programmer[] addProgrammer(Programmer[] programmers, Programmer programmer) {
		String name=programmer.getName();
		int i=isExsit(programmers,name);
		
		Programmer[] targetProgrammers=new Programmer[programmers.length+1];
		for(int index=0;index<programmers.length;index++){
			targetProgrammers[index]=programmers[index];
		}
		if(i<0){
			targetProgrammers[programmers.length]=programmer;
		}else{
			System.out.println("该程序员已存在");
		}
		return targetProgrammers;
	}
	/**
	 * 根据名字开除一个程序员
	 * @param programmers	原程序员数组
	 * @param name          要删除程序员的名字
	 * @return              返回删除后的程序员数组
	 */
	@Override
	public Programmer[] deleteProgrammer(Programmer[] programmers, String name) {
		
        int i=isExsit(programmers,name);
		Programmer[] targetProgrammers=new Programmer[programmers.length-1];
		if(i>=0){
			for(int index=0;index<i;index++){
				targetProgrammers[index]=programmers[index];
			}
			for(int index=i+1;index<programmers.length;index++){
				targetProgrammers[index-1]=programmers[index];
			}
			System.out.println("删除成功");
		}else{
			System.out.println("该程序员不存在");
			targetProgrammers=programmers;
		}
		return targetProgrammers;
	}
	/**
	 * 开除所有的男的程序员
	 * @param programmers	原程序员数组
	 * @return              返回删除后的程序员数组
	 */
	@Override
	public Programmer[] deleteMaleProgrammers(Programmer[] programmers) {
		int counter=0;
		for(int index=0;index<programmers.length;index++){
			String sex=programmers[index].getSex();
			if(sex.equals("男")){
				counter++;
			}
		}
		int counter1=0;
		Programmer[] delProgrammers=new Programmer[programmers.length-counter];
		
		for(int i=0;i<programmers.length;i++){
			String sex=programmers[i].getSex();
			if(!sex.equals("男")){
				delProgrammers[counter1++]=programmers[i];
			}
		}
		return delProgrammers;
	}
	/**
	 * 把所有的女程序员的工资增加1000块
	 * @param programmers	原程序员数组
	 * @return              返回增加后的程序员数组
	 */
	@Override
	public Programmer[] addSalaryForFemaleProgrammers(Programmer[] programmers) {
		for(int index=0;index<programmers.length;index++){
			String sex=programmers[index].getSex();
			if(sex.equals("女")){
				int salary=programmers[index].getSalary()+1000;
				programmers[index].setSalary(salary);
			}
		}
		return programmers;
	}
	/**
	 * 查询所有工资在10000以上的程序
	 * @param programmers	原程序员数组
	 * @return              返回工资在10000以上的的程序员数组
	 */
	@Override
	public Programmer[] findSalaryAbove(Programmer[] programmers) {
		int counter=0;
		for(int index=0;index<programmers.length;index++){
			int salary=programmers[index].getSalary();
			if(salary>10000){
				counter++;
			}
		}
		int counter1=0;
		Programmer[] targetProgrammers=new Programmer[counter];
		for(int index=0;index<programmers.length;index++){
			int salary=programmers[index].getSalary();
			if(salary>10000){
				targetProgrammers[counter1++]=programmers[index];
			}
		}
		return targetProgrammers;
	}
	/**
	 * 查询所有工资在10000以上的中级程序员
	 * @param programmers			原程序员数组
	 * @return                      返回工资在10000以上的中级程序员数组
	 */
	@Override
	public Programmer[] findSalaryAboveAndLevelAbove(Programmer[] programmers) {
		Programmer[] salaryAbove = findSalaryAbove(programmers);
		int counter=0;
		for(int index=0;index<salaryAbove.length;index++){
			String level = salaryAbove[index].getLevel();
			if(level.equals("中级程序员")){
				counter++;
			}
		}
		Programmer[] salaryAndLevelAbove = new Programmer[counter];
		int counter1=0;
		for(int index=0;index<programmers.length;index++){
			String level = programmers[index].getLevel();
			if(level.equals("中级程序员")){
				salaryAndLevelAbove[counter1++]=programmers[index];
			}
		}
		return salaryAndLevelAbove;
	}

}
